package net.jumpengine.bean;

import net.jumpengine.inter.IUpdateBase;

/**
 * 可以修改状态的Base,由Manager.animation调用update(long)方法. <br />
 * 开发者实现invoke()修改状态,实现draw(context)绘制.
 * <br /><br />
 * <b>作者:&nbsp;</b>张天文 <br />
 * <b>日期:&nbsp;</b>2020年2月24日 下午4:35:16<br />
 * @date
 */
public abstract class ChangeBase extends Base implements IUpdateBase{
	protected long interval;
	protected long time=0;
	protected boolean end=false;
	protected boolean able=true;
	
	/**
	 * 默认不设宽度与高度的构造方法
	 * @param x x坐标
	 * @param y y坐标
	 * @param interval 调用的间隔时间,以毫秒为单位,now-time>interval才会修改状态
	 */
	public ChangeBase(int x, int y,long interval) {
		this(x,y,0,0,interval);
	}
	
	public ChangeBase(int x, int y, int width, int height,long interval) {
		this(x, y, width, height,0,interval);
	}
	
	public ChangeBase(int x, int y, int width, int height,int index,long interval) {
		super(x, y, width, height,index);
		this.interval=interval * 1_000_000L;
	}

	@Override
	public void update(long now) {
		if(end)return;
		if(time==0) {
			time=now;
			return;
		}
		if(now-time<interval)return;
		time=now;
		invoke();
	}
    
	/**
	 * 当change(long)判断时间间隔已过,就会调用此方法.该类状态需要开发者自行维护.
	 */
	protected abstract void invoke();
	
	@Override
	public boolean isAble() {
		return able;
	}

	public void setAble(boolean able) {
		this.able = able;
	}
}
